#ifndef COMMONPAGE_H
#define COMMONPAGE_H

#include <QWidget>
#include <QListWidgetItem>
#include "listitembox.h"
#include "musiclist.h"
#include <QDebug>
#include <QMediaPlaylist>

namespace Ui {
class CommonPage;
}



enum PageType
{
    LIKE_Page,  //我喜欢的页面
    LOCAL_Page, //本地下载
    HISTORY_Page  //历史播放 /最近播放页面
};

class CommonPage : public QWidget
{
    Q_OBJECT

public:
    explicit CommonPage(QWidget *parent = nullptr);
    ~CommonPage();

    void setCommonPageUI(const QString& text, const QString& imagePath); //设置当前page的标题，还有图片

    void setMusicListType(PageType musicListType); //设置当前页面属于那个类型 1我喜欢  2本地下载 3最近播放

    //musicList是一个类，成员有一个vector<music>，里面保存了所有的音乐，然后对应的音乐需要放到页面page的musicOfPage里面
    void addMusicToMusicPage(MusicList& musicList);

    void reFresh(MusicList& musicList); //先所有歌曲musicList刷新添加到指定的页面，然后显示到QListWidget中

    //将对应歌曲添加到播放列表中，什么时候调用了，当双击item触发播放信号的时候，程序启动，刚从
    //sqlite数据读到东西的时候
    void addMusicToPlaylist(MusicList& musicList, QMediaPlaylist* playList);

    //根据下标获得路径， 因为musicofpage的下标和playlist的内容是一样的，所以他们的下标是一样的。
     QString getMusicIdByIndex(int index);

     //设置页面的那个图片
     void setMusicImage(QPixmap pixmap);

signals:
    //点击listitembox上面的爱心，然后触发listitembox 的 setIsLike信号，然后再次触发commonPage的updateLikeMusic信号
    //然后最后触发QQMusic的onUpdateLikeMusicAndPage，然后设置歌曲的isLike属性，调用3个page的reFresh来刷新页面
    void updateLikeMusic(bool isLike, const QString& musicId );

    //点击page上的播放全部，需要给QQMusic发送一个信号去播放所有的音乐，传递是当前哪个页面PageType
    //然后QQMusic去调用playAllMusicOfCommonPage(CommonPage *page, 0)，里面会再次调用page，然后对playList进行刷新的
    //addMusicToPlaylist(MusicList &musicList, QMediaPlaylist *playList)
    void PlayAll(PageType);

    //实现双击item播放音乐，然后调用QQMusic的playMusicByIndex(CommonPage *page, int index)
    //他会继续调用playAllMusicOfCommonPage(CommonPage *page, int index)，来对歌曲进行播放
    void playMusicByIndex(CommonPage*, int);
private:
    Ui::CommonPage *ui;

    PageType pageType;  //保存该页面的分类（属于哪个commonPage）
    QVector<QString> musicOfPage; //保存musicListType对应页面的歌曲ID, 一个page可以对应多个id
};

#endif // COMMONPAGE_H



//musicList中保存了所有的歌曲，而界面中有likePage, localPage, recentPage 三个CommonPage页面
//不同的页面需要显示其对应的歌曲文件数据，CommonPage类内部需要知道：哪些歌曲属于哪个页面



